Aproksymacja na siatce z wiszącymi węzłami
Problem aproksymacji na siatce z wiszącymi węzłami został dokładnie przedstawiony w pracy [1].
Rozważmy teraz przypadek siatki, w której mamy jeden duży element \( [0,2]\times[1,3] \) oraz dwa małe elementy \( [0,1]\times[0,1] \) oraz \( [0,1]\times[1,2] \).
Najprostszy sposób skonstruowania funkcji bazowych na takich elementach to liniowe funkcje B-spline (które defakto odpowiadają liniowym wielomianom Lagrange'a).
Uzyskujemy je poprzez rozpięcie wektorów węzłów [0 0 1 1 2 2] w kierunu osi \( x \) oraz [0 0 1 1] w kierunku osi \( y \)y, dla dwóch małych elementów oraz [0 0 2 2] w kierunku osi \( x \) oraz [1 1 3 3] w kierunku osi \( y \).
Zauważmy że nasze wektory węzłów [0 0 1 1 2 2] oraz [0 0 1 1] rozpinają następujące funkcje bazowe \( B^x_{1;1}(x),B^x_{2;1}(x), B^x_{3;1}(x); B^y_{1;1}(y),...,B^y_{1;2}(y) \) na małych elementach, co poprzez ich przemnożenie (skonstruowanie iloczynu tensorowego) daje dwuwymiarowe funkcje bazowe \( B^x_{1;1}(x)B^y_{1;1}(y), B^x_{1,1}(x)B^y_{1;2}(y), B^x_{2;1}(x)B^y_{1;1}(y), B^x_{2,1}(x)B^y_{1;2}(y) \) na pierwszym małym elemencie, oraz \( B^x_{2;1}(x)B^y_{1;1}(y), B^x_{2,1}(x)B^y_{1;2}(y), B^x_{3;1}(x)B^y_{1;1}(y), B^x_{3,1}(x)B^y_{1;2}(y) \) na drugim małym elemencie.
Ponadto, na dużym elemencie nasze wektory węzłów [0 0 2 2] i [1 1 3 3] rozpinają funkcje bazowe \( B^x_{4;1}(x),B^x_{5;1}(x);B^y_{3;1}(y),...,B^y_{4;2}(y) \). Iloczyn tensorowy tych jednowymiarowych funkcji bazowych daje następujące dwuwymiarowe funkcje bazowe \( B^x_{4;1}(x)B^y_{3;1}(y), B^x_{4,1}(x)B^y_{4;2}(y), B^x_{5;1}(x)B^y_{3;1}(y), B^x_{5,1}(x)B^y_{4;2}(y) \).
Oznaczmy przez \( B_1^{small1} \) zawężenie funkcji bazowej
\( B^x_{1;1}(x)B^y_{2;1}(y) \) do wspólnej krawędzi na pierwszym małym elemencie Rys. 1, oraz przez \( B_1^{small2} \) zawężenie funkcji bazowej \( B^x_{2;1}(x)B^y_{2;1}(y) \) do wspólnej krawędzi na drugim małym elemencie Rys. 1.
Oznaczmy również przez \( B_1^{big} \) zawężenie funkcji bazowej \( B^x_{4;1}(x)B^y_{3;1}(y) \) do wspólnej krawędzi na dużym elemencie Rys. 1.
Oznaczmy przez \( B_2^{small1} \) zawężenie funkcji bazowej \( B^x_{2;1}(x)B^y_{2;1}(y) \) do wspólnej krawędzi na pierwszym elemencie Rys. 2, oraz przez \( B_2^{small2} \) zawężenie funkcji bazowej \( B^x_{3;1}(x)B^y_{2;1}(y) \) do wspólnej krawędzi na drugim elemencie Rys. 2.
Oznaczmy również przez \( B_2^{big} \) zawężenie funkcji bazowej \( B^x_{5;1}(x)B^y_{3;1}(y) \) do wspólnej krawędzi na dużym elemencie Rys. 2.
Powstaje wówczas następujący problem. Jeśli chcemy aproksymować jakąś funkcję ciągłą (na przykład pole skalarne temperatury) nad taką siatką obliczeniową, nasza aproksymacja powinna być ciągła. W przypadku grup elementów jednorodnego rozmiaru, funkcje bazowe B-spline rozpinają się w sposób naturalny na wielu elementach, i aproksymacja na granicach elementów jest naturalnie ciągła. W przypadku elementów podzielonych na mniejsze elementy, które dzielą krawędzie z większym elementem, tak jak ma to miejsce w naszym przypadku, mamy szereg lokalnych funkcji na dużym i małych elementach, które nie dość że nie są ze sobą posklejane poprzez krawędź, to jeszcze jest ich różna liczba z jednej i z drugiej strony, i mają one inne wykresy nad współdzieloną krawędzią.
Wierzchołek pomiędzy dwoma małymi elementami na wspólnej krawędzi, znajdujący się na środku dużego elementu nazywa się wiszącym węzłem (ang. hanging node) lub związanym węzłem (ang. constrained node). Jest tak dlatego, że funkcje bazowe które są nad nim rozpięte na małych elementach, muszą zostać użyte do dostosowania aproksymacji dla dużej funkcji bazowej na dużym elemencie. W jaki sposób wykonujemy takie "dostosowanie"?
W naszym przypadku używamy lokalnych funkcji bazowych na małych elementach do zamapowania odpowiadających im dużych funkcji bazowych na dużych elementach.
W naszym przypadku, wystarczy zamapować funkcje \( B_1^{big}(x,y) \) poprzez kombinację liniową funkcji \( B_1^{small1}(x,y),B_1^{small2}(x,y),B_2^{small1}(x,y),B_2^{small2}(x,y) \). Innymi słowy musimy znaleźć takie współczynniki \( b_1^{small1},b_1^{small2},b_2^{small1},b_2^{small2} \) żeby \( B_1^big(x,y) =b_1^{small1}B_1^{small1}(x,y)+b_1^{small2}B_1^{small2}(x,y)+b_2^{small1}B_2^{small1}(x,y)+b_2^{small2}B_2^{small2}(x,y) \), dla \( x\in(0,2)y=1 \) czyli rozpiętych na wspólnej krawędzi.Proces ten zilustrowany jest na Rys. 3. Widać tutaj że kombinacja ta to \( B_1^big(x,y) =1.0*B_1^{small1}(x,y)+0.5*B_1^{small2}(x,y)+0.5*B_2^{small1}(x,y) \), czyli 1.0, 0.5, 0.5, 0.0.
Ponadto musimy zamapować funkcje \( B_2^{big}(x,y) \) poprzez kombinację liniową funkcji \( B_1^{small1}(x,y),B_1^{small2}(x,y),B_2^{small1}(x,y),B_2^{small2}(x,y) \). Innymi słowy musimy znaleźć takie współczynniki \( c_1^{small1},c_1^{small2},c_2^{small1},c_2^{small2} \) żeby \( B_2^big(x,y) =c_1^{small1}B_1^{small1}(x,y)+c_1^{small2}B_1^{small2}(x,y)+c_2^{small1}B_2^{small1}(x,y)+c_2^{small2}B_2^{small2}(x,y) \), dla \( x\in(0,2)y=1 \) czyli rozpiętych na wspólnej krawędzi. Proces ten zilustrowany jest na Rys. 4. Widać tutaj że kombinacja ta to \( B_2^big(x,y) =0.5*B_1^{small2}(x,y)+0.5*B_2^{small1}(x,y)+1.0*B_2^{small2}(x,y)+ \), czyli 0.0, 0.5, 0.5, 1.0.